package com.erp.erp_servers.business.imp;

import com.erp.erp_dao.business.IExportContractDao;
import com.erp.erp_entitys.Customer.CustomerInformationRecordReq;
import com.erp.erp_entitys.Customer.CustomerInformationRecordRes;
import com.erp.erp_entitys.business.entity.ExportContractEntity;
import com.erp.erp_entitys.business.req.*;
import com.erp.erp_entitys.business.rsp.*;
import com.erp.erp_servers.business.IExportContractService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

/**
 * @ClassName : ExportContractServiceImp
 * @Description : 外销主表接口实现类
 * @Author : lst
 * @Date: 2021-01-17 10:56
 */
@Service
public class ExportContractServiceImp implements IExportContractService {

    /**
     * 注入外销mapper
     */
    private final IExportContractDao exportContractDao;

    @Autowired
    public ExportContractServiceImp(IExportContractDao exportContractDao) {
        this.exportContractDao = exportContractDao;
    }

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public ExportContractEntity queryById(Integer id) {
        return exportContractDao.queryById(id);
    }

    @Override
    public ExportContractEntity queryByBillNo(String billNo) {
        return exportContractDao.queryByBillNo(billNo);
    }

    /**
     * 通过实体作为筛选条件查询
     *
     * @param exportContract 实例对象
     * @return 对象列表
     */
    @Override
    public List<ExportContractEntity> queryAll(ExportContractEntity exportContract) {
        return exportContractDao.queryAll(exportContract);
    }

    /**
     * 新增数据
     *
     * @param exportContract 实例对象
     * @return 影响行数
     */
    @Override
    public int insert(ExportContractEntity exportContract) {
        return exportContractDao.insert(exportContract);
    }

    /**
     * 修改数据
     *
     * @param exportContract 实例对象
     * @return 影响行数
     */
    @Override
    public int update(ExportContractEntity exportContract) {
        return exportContractDao.update(exportContract);
    }


    /**
     * 获取外销集合
     * @param req 查询参数
     * @return 外销集合
     */
    @Override
    public List<ExportContractEntity> getExportContractListInfo(ExportContractPageListInfoReq req) {
        return exportContractDao.getExportContractListInfo(req);
    }


    /**
     * 获取外销集合
     * @param req 查询参数
     * @return 外销集合
     */
    @Override
    public List<ExportContractEntity> queryImportContractInfo(ImportExportContractInfoReq req) {
        return exportContractDao.queryImportContractInfo(req);
    }


    /**
     * 审批完成后修改数据状态
     * @param id 审批单据id
     * @param status 审批状态
     * @return 是否修改成功(true:是 false:否)
     */
    @Override
    public boolean updateStatus(String id, String status) {
        ExportContractEntity contract = new ExportContractEntity();
        contract.setId(Integer.parseInt(id));
        switch (status){
            //待审批，待批箱
            case "1":
                contract.setStatus(2);
                break;
            //审批完成，已批箱
            case "2":
                contract.setStatus(3);
        }
        return exportContractDao.update(contract) == 1 ? true : false;
    }

    /**
     * 统计1
     * @param req 查询参数
     * @return 统计1
     */
    @Override
    public List<ContractStatisticsOneRsp> getContractStatisticsOne(ContractStatisticsOneReq req) {
        return exportContractDao.getContractStatisticsOne(req);
    }

    /**
     * 统计2
     * @param req 查询参数
     * @return 统计2
     */
    @Override
    public List<ContractStatisticsTwoRsp> getContractStatisticsTwo(ContractStatisticsTwoReq req) {
        return exportContractDao.getContractStatisticsTwo(req);
    }

    @Override
    public CompanyLogo getImgLogoUrl(Integer id) {
        return exportContractDao.getImgLogoUrl(id);
    }

    /**
     * 获取本月外销合同数量
     * @param req 查询条件
     * @return 总和
     */
    @Override
    public long getExportBillNoCount(StatisticsInfoReq req) {
        return exportContractDao.getExportBillNoCount(req);
    }

    /**
     * 获取本月外销合同数量
     * @param req 查询参数
     * @return 本月外销合同数量
     */
    @Override
    public List<ExportContractEntity> getExportInfo(StatisticsInfoReq req) {
        return exportContractDao.getExportInfo(req);
    }

    /**
     * 获取报价单号、以及报价在外销中的数量
     * @param req 查询参数
     * @return 报价单号、以及报价在外销中的数量
     */
    @Override
    public StatisticsOfferBillNoRsp getStatisticsOfferBillNo(StatisticsInfoReq req) {
        return exportContractDao.getStatisticsOfferBillNo(req);
    }

    /**
     * 控制台-获取外销信息
     * @param req 查询参数
     * @return 外销信息
     */
    @Override
    public List<StatisticsExportInfoRsp> getStatisticsExportInfo(StatisticsInfoReq req) {
        return exportContractDao.getStatisticsExportInfo(req);
    }

    @Override
    public List<CustomerInformationRecordRes> getFirstCustomerInfoList(CustomerInformationRecordReq req) {
        return exportContractDao.getFirstCustomerInfoList(req);
    }

    /**
     * 根据客户编码获取该客户已使用信用额度
     * @param customerCode 客户编码
     * @return 客户已使用信用额度
     */
    @Override
    public BigDecimal getSumTotalContractAmount(String customerCode) {
        return exportContractDao.getSumTotalContractAmount(customerCode);
    }

    @Override
    public List<DeliveryDateInfoRes> getDeliveryDateInfoList(DeliveryDateInfoReq req) {
        return exportContractDao.getDeliveryDateInfoList(req);
    }

    /**
     * 客户订单统计
     * @param req 查询条件
     * @return 客户订单统计
     */
    @Override
    public List<ContractCustomerInfoRsp> getContractCustomerInfo(ContractCustomerInfoReq req) {
        return exportContractDao.getContractCustomerInfo(req);
    }

    @Override
    public List<ExportExpensesRes> getExportExpensesList(ExportExpensesReq req) {
        return exportContractDao.getExportExpensesList(req);
    }

    @Override
    public List<ExportContractEntity> findExportContractByParam(String customerCode) {
        return exportContractDao.findExportContractByParam(customerCode);
    }
}
